package top.lixunda.commerce.common.core.controller.wrapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author LiXunda
 * @version time:2019/10/16 17:04
 * <p>
 * 用于传递一个分页数据对象和两个条件构造对象
 */
@SuppressWarnings({"WeakerAccess", "unused"})
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class PageConvertWrapper<E, T, D> {

    /**
     * 分页数据
     */
    private Page<D> page;

    /**
     * 用户分页的条件，主数据的条件
     */
    private BaseDataQuerySqlWrapper<E> pageWrapper;

    /**
     * 用户对子数据进行筛选的条件
     */
    private BaseDataQuerySqlWrapper<T> queryWrapper;

    public static <E, T, D> PageConvertWrapper<E, T, D> build(Page<D> page, BaseDataQuerySqlWrapper<E> pageWrapper,
                                                              BaseDataQuerySqlWrapper<T> queryWrapper) {
        return new PageConvertWrapper<E, T, D>().setPage(page).setPageWrapper(pageWrapper).setQueryWrapper(queryWrapper);
    }

    public static <E, T, D> PageConvertWrapper<E, T, D> build(Page<D> page) {
        return build(page, null, null);
    }

    public static <E, T, D> PageConvertWrapper<E, T, D> build(Page<D> page, BaseDataQuerySqlWrapper<E> pageWrapper) {
        return build(page, pageWrapper, null);
    }

}
